package com.minimalist.lindi.service;

import com.minimalist.common.config.mybatis.bo.PageResp;
import com.minimalist.common.entity.lindi.po.LindiTradeApplication;
import com.minimalist.common.entity.lindi.vo.tradeapplication.LindiTradeApplicationAgreeVO;
import com.minimalist.common.entity.lindi.vo.tradeapplication.LindiTradeApplicationQueryVO;
import com.minimalist.common.entity.lindi.vo.tradeapplication.LindiTradeApplicationVO;
import com.mybatisflex.core.service.IService;

/**
 * 林地交易指标申请 服务层。
 *
 * @author 11987
 * @since 2025-04-18
 */
public interface LindiTradeApplicationService extends IService<LindiTradeApplication>{

    /**
     * 新增交易申请
     *
     * @param tradeApplicationVO LindiTradeApplicationVO
     */
    void addTradeApplication(LindiTradeApplicationVO tradeApplicationVO);

    /**
     * 删除交易申请
     *
     * @param tradeApplicationId 交易申请ID
     */
    void deleteTradeApplicationByTradeApplicationId(Long tradeApplicationId);

    /**
     * 更新交易申请
     *
     * @param tradeApplicationVO LindiTradeApplicationVO
     */
    void updateTradeApplication(LindiTradeApplicationVO tradeApplicationVO);

    /**
     * 分页查询交易申请列表
     *
     * @param queryVO LindiTradeApplicationQueryVO
     * @return PageResp<LindiTradeApplicationVO>
     */
    PageResp<LindiTradeApplicationVO> getPageTradeApplicationList(
            LindiTradeApplicationQueryVO queryVO);

    /**
     * 根据交易申请ID查询交易申请
     *
     * @param tradeApplicationId 交易申请ID
     * @return LindiTradeApplicationVO
     */
    LindiTradeApplicationVO getTradeApplicationByTradeApplicationId(Long tradeApplicationId);

    /**
     * 是否同意交易申请
     *
     * @param agreeVO LindiTradeApplicationAgreeVO
     */
    void agreeTradeApplication(LindiTradeApplicationAgreeVO agreeVO);

    /**
     * 分页查询已完成的交易记录
     *
     * @param queryVO LindiTradeApplicationQueryVO
     * @return PageResp<LindiTradeApplicationVO>
     */
    PageResp<LindiTradeApplicationVO> getCompletedTradeApplicationList(
            LindiTradeApplicationQueryVO queryVO);

    /**
     * 审批交易申请
     *
     * @param agreeVO LindiTradeApplicationAgreeVO
     */
    void approveTradeApplication(LindiTradeApplicationAgreeVO agreeVO);
}
